﻿using Abide_Halo_Library;
using System;
using System.Runtime.Serialization;

namespace Abide_AddOn_API.Interfaces
{
    /// <summary>
    /// Represents a base Abide AddOn
    /// </summary>
    public interface IAddOn : IDisposable
    {
        /// <summary>
        /// Gets and returns the Abide_AddOn_API.AddOnAPI instance that this Abide AddOn instance uses
        /// </summary>
        AddOnAPI API { get; }
        /// <summary>
        /// Gets and returns the version of this Abide AddOn
        /// </summary>
        Version Version { get; }
        /// <summary>
        /// Gets and returns the version of Abide that this Abide AddOn is designed to work with
        /// </summary>
        Version AbideVersion { get; }
        /// <summary>
        /// Gets and returns the name of this AddOn's author
        /// </summary>
        string Author { get; }
        /// <summary>
        /// Gets or sets the directory this Abide AddOn is located in
        /// </summary>
        string Directory { get; set; }
        /// <summary>
        /// Gets and returns the Halo Map Version that this Abide AddOn is designed to work with
        /// </summary>
        MapVersion MapVersion { get; }
        /// <summary>
        /// Called by the AddOn Host, initializes an Abide AddOn instance, preparing it for use
        /// </summary>
        /// <param name="host">The Calling Host</param>
        void Initialize(IAddOnHost host);
        /// <summary>
        /// Called by the AddOn Host when the Debug Xbox is changed.
        /// </summary>
        void OnXboxChanged();
        /// <summary>
        /// Called by the AddOn Host when the Selected Index Entry is changed.
        /// </summary>
        void OnIndexEntryChanged();
    }
}
